#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define InitSize 10

//动态分配数组
typedef struct LNode *List;
struct LNode{
    int *Data;
    int Length;//线性表的最后一个元素
    int MaxSize;
};

struct LNode L;
List Ptrl;

List init();
int find(int x, List Ptrl);
bool insert(List Ptrl, int i, int e);
bool delete(List Ptrl, int i, int e);
void show(List Ptrl);

int main()
{
    List Ptrl = init();
    bool b = insert(Ptrl, 1, 1);
    bool c = insert(Ptrl, 1, 1);
    bool d = insert(Ptrl, 2, 2);
    show(Ptrl);
    return 0;
}

List init() {
    List Ptrl =(List)malloc(sizeof(struct LNode));;
    Ptrl->Data = (int *)malloc(sizeof(int) * InitSize);
    Ptrl->Length = 0;
    Ptrl->MaxSize = InitSize;
    return Ptrl;
}

bool insert(List Ptrl, int i, int e) {
    //判断插入位置是否合法
    if(i<1 || i>Ptrl->Length+1){
        printf("插入位置不合法");
        return false;
    }
    //判断数组是否已满
    if(Ptrl->Length >= Ptrl->MaxSize) {
        printf("数组已满");
        return false;
    }
    //开始执行插入操作
    for(int j = Ptrl->Length; j>=i; j--) {
       Ptrl->Data[Ptrl->Length] = Ptrl->Data[Ptrl->Length-1];    
    }
    Ptrl->Data[i-1] = e;
    Ptrl->Length++;
    return true;

}

int find(int x, List Ptrl) {
    int i = 0;
    while(i <= Ptrl->Length && Ptrl->Data[i]!=x)
        i++;
    if(i > Ptrl->Length){
        return -1;//如果没找到，返回-1
    }else{
        return i;//找到了返回数组小标
    }      
   
}

void show(List Ptrl) {
    if (Ptrl->Length <= 0) {
        printf("数组为空");
    }
    printf("start print: ");
    for(int i = 0; i<=Ptrl->Length-1; i++) {
        printf(" %d ", Ptrl->Data[i]);
    }
    printf("over");
}